// 应用配置类型
export interface AppConfig {
	env: string;
	name: string;
	url: string;
	port: number;
	description: string;
	version: string;
}

// JWT配置类型
export interface JwtConfig {
	app: {
		secret: string;
		expiresIn: string;
		refreshExpiresIn: string;
	};
	admin: {
		secret: string;
		expiresIn: string;
		refreshExpiresIn: string;
	};
}

// MongoDB配置类型
export interface MongodbConfig {
	host: string;
	port: number;
	username: string;
	password: string;
	database: string;
	authSource: string;
	replicaSet?: string;
}

// Redis配置类型
export interface RedisConfig {
	host: string;
	port: number;
	password?: string;
}

// Loki配置类型
export interface LokiConfig {
	enabled: boolean;
	host: string;
	basicAuth?: string;
}

// 完整配置类型
export interface ConfigType {
	app: AppConfig;
	jwt: JwtConfig;
	mongodb: MongodbConfig;
	redis: RedisConfig;
	loki: LokiConfig;
}

// 配置键类型
export type ConfigKeys = keyof ConfigType;

// 嵌套配置键类型
export type ConfigPath =
	| 'app'
	| 'app.env'
	| 'app.name'
	| 'app.url'
	| 'app.port'
	| 'app.description'
	| 'app.version'
	| 'jwt'
	| 'jwt.app'
	| 'jwt.app.secret'
	| 'jwt.app.expiresIn'
	| 'jwt.admin'
	| 'jwt.admin.secret'
	| 'jwt.admin.expiresIn'
	| 'mongodb'
	| 'mongodb.host'
	| 'mongodb.port'
	| 'mongodb.username'
	| 'mongodb.password'
	| 'mongodb.database'
	| 'mongodb.authSource'
	| 'mongodb.replicaSet'
	| 'redis'
	| 'redis.host'
	| 'redis.port'
	| 'redis.password'
	| 'loki'
	| 'loki.enabled'
	| 'loki.host'
	| 'loki.basicAuth';

// 根据路径获取配置值类型的工具类型
export type GetConfigType<T extends ConfigPath> =
	T extends 'app' ? AppConfig :
	T extends 'app.env' ? string :
	T extends 'app.name' ? string :
	T extends 'app.url' ? string :
	T extends 'app.port' ? number :
	T extends 'app.description' ? string :
	T extends 'app.version' ? string :
	T extends 'jwt' ? JwtConfig :
	T extends 'jwt.app' ? JwtConfig['app'] :
	T extends 'jwt.app.secret' ? string :
	T extends 'jwt.app.expiresIn' ? string :
	T extends 'jwt.admin' ? JwtConfig['admin'] :
	T extends 'jwt.admin.secret' ? string :
	T extends 'jwt.admin.expiresIn' ? string :
	T extends 'mongodb' ? MongodbConfig :
	T extends 'mongodb.host' ? string :
	T extends 'mongodb.port' ? number :
	T extends 'mongodb.username' ? string :
	T extends 'mongodb.password' ? string :
	T extends 'mongodb.database' ? string :
	T extends 'mongodb.authSource' ? string :
	T extends 'mongodb.replicaSet' ? string | undefined :
	T extends 'redis' ? RedisConfig :
	T extends 'redis.host' ? string :
	T extends 'redis.port' ? number :
	T extends 'redis.password' ? string | undefined :
	T extends 'loki' ? LokiConfig :
	T extends 'loki.enabled' ? boolean :
	T extends 'loki.host' ? string :
	T extends 'loki.basicAuth' ? string | undefined :
	unknown;
